home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-09-16 | 20.0 KB | 599 lines | [TEXT/ttxt] |
- MCL 2.0p2 Release Notes
-
-
- Installation
-
- You probably received mcl2.0p2.fasl in BinHex (.hqx) format. Before you
- can install the patch you will need to decode the BinHex, using an
- application (like StuffIt or Compact Pro) that knows how to deal with
- BinHex. You can also use the "BinHex" application shipped with MCL 2.0,
- in the "Examples:" folder.
-
- To install mcl2.0p2.fasl, create a folder called "patches 2.0" in your
- MCL folder, put the decoded patch file into it, start up MCL 2.0p1,
- then type:
-
- (ccl::load-patches)
- (save-application "MCL 2.0p2" :init-file "init")
-
- You must install Patch 1 before (or at the same time as) you install
- patch 2. When you start up the new MCL 2.0p2 application, it should
- know its new patch level:
-
- Welcome to Macintosh Common Lisp Version 2.0p2!
-
- If you have any problems installing or using this patch, please let us
- know at
-
- bug-mcl@cambridge.apple.com
-
- Thanks for using our Lisp!
-
-
-
- Notes
-
- The following describes some of the contents of this patch. The
- "individual patch file" names are for our own bookkeeping. The point
- of the following notes is to allow you to recognize whether a particular
- fix made it into this release, not to fully describe all of the bugs fixed.
- Most of them are drawn from comments in the source code; many may seem pretty
- cryptic, especially if you haven't encountered the bug yourself.
- Feel free to skim!
-
-
- ; ==== New file: reindex-interfaces-patch.lisp ====
- ; reindex-interfaces takes two keyword args that allow
- ; the process to be streamlined:
- ;
- ; reindex-interfaces &key :which :files
- ;
- ; Valid values for the :which keyword
- ; nil the default. Parse all definitions
- ; :traps parse only trap definitions
- ; :no-traps parse only non-trap definitions (constants, mactypes, records)
- ;
- ; Valid values for the :files keyword
- ; nil the default. Parse all files in "ccl:interfaces;*.lisp"
- ; T Parse all files that are newer than the oldest index file.
- ; string same as (list string)
- ; list parse all files in the list. Wildcards are allowed.
- ; The directory defaults to "ccl:interfaces;".
- ; The file type defaults to ".lisp".
- ;
- ; Examples:
- ;
- ; To bring the interface in line with changes in the files:
- ;
- ; (reindex-interfaces :files t)
- ;
- ; To reindex the file "ccl:interfaces;osutils.lisp"
- ;
- ; (reindex-interfaces :files "osutils")
- ;
- ; Note: you rarely want to specify the :which keyword. Since entries
- ; are indexed by position in the file, you must reindex all definitions
- ; that are below anything that you changed.
-
-
- ; ==== New file: hardcopy-patch.lisp ====
- ; You can now print a fred-dialog-item as well as a fred-window.
- ;
- ; Some _PrXXXX traps seem to clobber thePort when ImageWriter
- ; in use. Clobber it back, fixing ImageWriter
- ; printing problems.
-
-
- ; ==== New file: fround-patch.lisp ====
- ; (fround 3) no longer signals an error
-
-
- ; ==== New file: compiler-let-patch.lisp ====
- ; Make compiler-let maintain the bindings around compilation
- ; of the entire enclosed top-level form. Part of the
- ; compilation was done after the bindings had disappeared before.
-
-
- ; ==== New file: undefined-functions-patch.lisp ====
- ; Add two functions which are referenced by MCL, but not defined:
- ; sort-list-error and %path-get-long-dir-info
-
-
- ; ==== New file: %make-uvector-patch.lisp ====
- ; nx2-seq-bind-var now generates code to set the subtype after
- ; calling $sp-stkallocgv
-
-
- ; ==== New file: shift-f-key-patch.lisp ====
- ; shift f-key patch
-
-
- ; ==== New file: Default-button-patch.lisp ====
- ;;; This patch changes the pen pattern for the outlines
- ;;; of disabled default buttons so they are "greyed" out.
-
-
- ; ==== New file: shiftf-rotatef-patch.lisp ====
- ; Make shiftf & rotatef evaluate their getters in the right order
-
-
- ; ==== New file: modal-dialog-patch.lisp ====
- ; don't return-from-modal-dialog when any random window closes
-
-
- ; ==== New file: locked-gethash-patch.lisp ====
- ; Gethash returned the wrong value when it found the key
- ; in the locked-additions alist.
-
-
- ; ==== New file: typep-standard-object.lisp ====
- ; Add type predicate to speed up (typep x 'standard-object).
-
-
- ; ==== New file: window-eos-patch-2.lisp ====
- ; Tried the following in this order until the window is on the screen:
- ;
- ; Move to the default-position arg or (view-default-position window)
- ; Resize to the default-size arg or (view-default-size window)
- ; Move to (window-on-screen-position window)
- ; Resize to (window-on-screen-size window)
- ;
- ; window-on-screen-position & window-on-screen-size are new generic
- ; functions. The window methods return the values that used to be
- ; hard-coded into window-ensure-on-screen (#@(6 44) & #@(502 147)
- ; respectively).
-
-
- ; ==== New file: non-constant-deftrap-patch.lisp ====
- ; Don't try to define-constant in deftrap if the value isn't a constant.
-
-
- ; ==== New file: fred-caps-lock-patch.lisp ====
- ; c-n & c-m-m no longer behave as if the shift key is down when
- ; the caps lock key is down.
-
-
- ; ==== New file: set-fred-font-patch.lisp ====
- ; set-view-font for fred-mixin should use buffer-set-font-spec
- ; rather than the default method which does buffer-set-font-codes
-
-
- ; ==== New file: expand-trap-patch.lisp ====
- ; The :case register-trap keyword had the wrong value.
- ; expand-trap needed to copy-tree the implementation, not copy-list
-
-
- ; ==== New file: windoid-close-patch.lisp ====
- ; No longer need the :before method on window-close.
- ; We can now call the WDEF during GC (which is exactly what #_DisposeWindow
- ; does).
-
-
- ; ==== New file: inline-defun-patch-2.lisp ====
- ; make the following work from the Listener as well as when
- ; compiled from a file. (Patch 1 fixed it for the file compiler, but
- ; broke it for the Listener).
- (declaim (inline inline-func))
- (defun inline-func (a b)
- (+ a b))
- (defun use-inline-func (a b)
- (inline-func a b))
-
-
- ; ==== New file: equalp-hash-patch.lisp ====
- ; EQUALP hash tables no longer error with CLOS instances as keys.
-
-
- ; ==== New file: format-comma-patch.lisp ====
- ; Format-print-number for mincol, padchar neq #\space, and comma char or interval
-
-
- ; ==== New file: arglist-patch.lisp ====
- ; (arglist #'(lambda (...) ...)) no longer calls arglist-from-help-file
-
-
- ; ==== New file: generic-plus-patch.lisp ====
- ; CERROR about replacing a kernel function when a user
- ; decides to replace a non-generic function with a generic function.
-
-
- ; ==== New file: fred-scroll-balloon-patch.lisp ====
- ; Make moving the thumb on a fred-window's horizontal scroll bar
- ; work correctly if a Help balloon is up over the window.
-
-
- ; ==== New file: color-components-patch.lisp ====
- ; Make sure that white is white
-
-
- ; ==== New file: disabled-table-patch.lisp ====
- ; Make disabled TABLE-DIALOG-ITEM's behave properly.
- ;
- ; Also makes VISIBLE-DIMENSIONS return NIL instead of signalling
- ; an error if called when (view-size item) is NIL.
- ; VIEW-DEFAULT-SIZE will respect VISIBLE-DIMENSIONS if specified.
-
-
- ; ==== New file: text-justification-patch.lisp ====
- ; Text-justification is now an :instance slot of static-text-dialog-item.
- ; It used to be a :class slot which made no sense at all.
-
-
- ; ==== New file: scroll-bar-size-patch.lisp ====
- ; Do the right thing for :view-size initarg and no :length or :width initarg.
- ; Also, don't ignore the :setting initarg.
-
-
- ; ==== New file: reactivate-window-patch.lisp ====
- ; Make clicking in a deactivated front-window reactivate it
- ; instead of calling view-click-event-handler.
- ; reselect-windows no longer calls view-activate-event-handler
- ; on windows that are already active-p.
- ; Null and key events are not sent to inactive windows.
- ; Deactivating the *selected-window* sets *selected-window* to NIL
- ; so that clicking on a windoid won't reactivate it.
-
-
- ; ==== New file: mlfss-patch.lisp ====
- ; Return NIL for the second value of make-load-form-saving-slots
- ; when there are no slots to save.
- ; Also, use ALLOCATE-INSTANCE instead of MAKE-INSTANCE or MAKE-<structure-name>.
-
-
- ; ==== New file: prepare-to-quit-patch.lisp ====
- ; Close windows from back to front while closing, but
- ; bring a window to the front before closing it if it
- ; needs saving.
-
-
- ; ==== New file: window-layer-patch.lisp ====
- ; Make the :window-layer initarg work for windows.
- ; Also, make (set-window-layer windoid 0) work for an invisible windoid.
-
-
- ; ==== New file: windoid-window-type-patch.lisp ====
- ; An explicit :window-type of NIL or :WINDOID to (make-instance 'windoid)
- ; gets the default windodefproc instead of an error.
-
-
- ; ==== New file: fred-selection-patch.lisp ====
- ; Fixes the following problem:
- #|
- Select this phrase
- in a Fred window
- please
-
- Click after the "l" in "Select", and drag down and to the right of "window" on
- the second line. With the cursor approximately under the "e" in "phrase", move
- the cursor up and down so that the third line becomes alternately selected and
- deselected. Note how the highlighting under "red window" on the second line is
- inconsistent. As you move the mouse up and down, the selected area grows and
- shrinks by one pixel. This is unusual, slightly annoying and it would be nice
- if you'd fix it.
- |#
-
-
- ; ==== New file: c-x-c-i-patch.lisp ====
- ; ed-inspect-current-sexp no lonver skips over reader macros
- ; in the sexp. This makes selecting "#x111" and typing c-x c-i
- ; pop up an inspector window for 273. instead of 111.
-
-
- ; ==== New file: frec-activate-patch.lisp ====
- ; frec-activate no longer calls frec-idle.
- ; This keeps the cursor from flashing when you click
- ; in a fred-dialog-item that is not the current-key-handler
-
-
- ; ==== New file: vacant-position-patch.lisp ====
- ; Don't attempt to set the SIZE slot of a view. The slot is named VIEW-SIZE.
-
-
- ; ==== New file: view-contains-point-patch.lisp ====
- ; Patch to make MCL work the same way the control
- ; manager does: e.g. a view contains its top and left border lines,
- ; but not the bottom and right border lines.
-
-
- ; ==== New file: load-pathname-patch.lisp ====
- ; translate component - source :unspecific or nil, to "*" => result :unspecific or nil
-
-
- ; ==== New file: sqrt-patch.lisp ====
- ; Sqrt was slow for floats
-
-
- ; ==== New file: documentation-patch.lisp ====
- ; The documentation window now shows arglists for symbols not in the help file.
-
-
- ; ==== New file: tsignal-error-patch.lisp ====
- ; The error message for an invalid arg to the CHARACTER function
- ; now makes sense.
- ; So does the error message for an array with no fill pointer
- ; to set-fill-pointer.
- ;
- ; Examples:
- (character 456)
- ; used to say: Error: Unbound variable: 456 .
- ; now says: Error: Can't coerce 456 to CHARACTER
-
- (set-fill-pointer "foo" 1)
- ; used to say: Error: Bad initialization form: "foo"
- ; now says: "foo" is not an array with a fill pointer.
-
-
- ; ==== New file: gf-keyvect-patch.lisp ====
- ; The following no longer signals an error due
- ; to looking inside a generic function when attempting to
- ; check keywords:
- (defmethod foo ((x integer) &key y)
- (list x y))
- (trace foo)
- (defun bar (x y)
- (foo x :y y))
-
-
- ; ==== New file: step-interrupts-patch.lisp ====
- ; The stepper no longer hangs if invoked while
- ; (or (< *interrupt-level* 0) *processing-events*)
-
-
- ; ==== New file: debugger-hook-patch.lisp ====
- ; make debugger-hook actually do something
-
-
- ; ==== New file: etdi-default-size-patch.lisp ====
- ; editable-text-dialog-items no longer default to being one pixel
- ; higher than other dialog-items.
- ;
- ; fred-dialog-items no longer appear the first time with their
- ; text 3 pixels to the right of where it belongs.
-
-
- ; ==== New file: constant-fold-expt-patch.lisp ====
- ; constant fold applications of EXPT
-
-
- ; ==== New file: save-application-patch.lisp ====
- ; in the cleanup form - don't make a new listener if there isn't one
- ; Required to make save-application work from a menu or dialog
-
-
- ; ==== New file: pathname-up-patch.lisp ====
- ; deal with 2 UPs
- ; semi-colon can mean up too
-
-
- ; ==== New file: directory-alias-patch-2.lisp ====
- ;; Yet another patch for avoiding indirect alias loops.
- ;; This one only eschews descending directories that are
- ;; found as a result of alias resolution. Hence it can't screw up
- ;; when there are no aliases in sight!
- ;; What is today called *directories-done* was %all-directories in patch 1
-
-
- ; ==== New file: movable-dialog-patch.lisp ====
- ; Add the :movable-dialog window-type.
- ; e.g. (make-instance 'window :window-type :movable-dialog)
-
-
- ; ==== New file: shared-fred-buffer-patch.lisp ====
- ; Make updating work correctly when fred-dialog-items
- ; share a buffer. Also, don't clear the buffer if a :buffer
- ; initarg is given to a fred-dialog-item.
-
- ; Test code: the two items should stay in sync
- ; and both should start out containing "Some text to start with"
- (let (et1)
- (make-instance 'window
- :view-size #@(200 210)
- :view-subviews (list (setq et1
- (make-instance 'fred-dialog-item
- :view-position #@(5 5)
- :view-size #@(195 90)
- :dialog-item-text "Some text to start with"))
- (make-instance 'fred-dialog-item
- :view-position #@(5 100)
- :view-size #@( 195 90)
- :buffer (fred-buffer et1)))))
-
-
- ; ==== New file: advise-warn-patch.lisp ====
- ; advise and trace tell user about compiler warnings,
- ; equal not eq for comparing advice-names.
-
-
- ; ==== New file: table-frame-color-patch.lisp ====
- ; Make :frame color work correctly on table-dialog-item's
- ; The problem before was that the view-activate-event-handler &
- ; view-deactivate-event-handler methods set the fore-color to
- ; the :frame color so that System 6 scroll bars would be that color.
- ; This caused the text of any highlighted cells to be drawn in the
- ; :frame color as well, unless a :text color was specified either
- ; for the whole table or for the cell.
-
-
- ; ==== New file: window-size-parts-patch.lisp ====
- ; Call window-size-parts later in the initialization sequence,
- ; after the subviews have been added.
-
-
- ; ==== New file: another-table-patch.lisp ====
- ; cell-position now returns NIL for cells that are in the scroll bar area
- ; This makes the following work correctly (No squares drawn over the
- ; vertical scroll bar):
-
- (let ((list-box
- (make-instance 'sequence-dialog-item
- :table-sequence
- (loop for i below 10 collect i)
- :sequence-wrap-length 3
- :visible-dimensions
- (make-point 3 3)
- :table-vscrollp t
- :table-hscrollp t
- :selection-type :contiguous)))
- (set-view-container
- list-box
- (make-instance 'dialog))
- (cell-select list-box (make-point 3 2))
- (cell-select list-box (make-point 3 1))
- (cell-select list-box (make-point 3 0))
- (window-select (ccl::current-listener)))
-
- ;
- ; set-table-sequence now deselects cells that are beyond the end
- ; of the new sequence and maintains the selection for cells that
- ; are still in the new sequence. This keeps it from leaving turds
- ; when the sequence is set while its window is not the selected window.
- ; This requires a patch to "ccl:examples;boyer-moore.lisp", which
- ; depended on the old behavior (selection shifts when sequence gets
- ; longer).
- ;
- ; A number of the table-dialog-item methods were conditionalized
- ; on (view-container item) being non-NIL rather than (dialog-item-handle item)
- ; being non-NIL. This could cause a crash if these methods were called
- ; when the table-dialog-item was not installed in a window (though
- ; noone has reported this problem).
-
-
- ; ==== New file: appleevent-errors-patch.lisp ====
- ; Signal errors during AppleEvent processing when
- ; *signal-appleevent-errors* is true (not the default)
-
-
- ; ==== New file: compile-load-patch.lisp ====
- ; The :fasl-file, :ignore-compiler-warnings, & :force-compile
- ; keywords are no longer passed along to compile-file or load by
- ; compile-load.
-
-
- ; ==== New file: portable-idle-patch.lisp ====
- ; Keep portables out of idle mode unless MCL is idle.
-
-
- ; ==== New file: disabled-etdi-patch.lisp ====
- ; disabled editable-text-dialog-item's get gray outlines
-
-
- ; ==== New file: aset-bounds-patch.lisp ====
- ; Make bounds check on setting displaced one-dimensional arrays
- ; work correctly. This patches the subprim $sp-aset1, changing
- ; an lsl.l to lsr.l.
- ; Also defines the functions patch-resource & patch-subprim, which
- ; are (IMHO) useful functions to have around.
- ; The following code will generate an out-of-bounds error
- ; before the patch is loaded
- (defparameter foo (make-array 512 :adjustable t))
- (defun lose ()
- (dotimes (i 9000)
- (when (>= i (length foo))
- (adjust-array foo (* 2 (length foo)))
- (let ((*print-array* nil))
- (print foo)))
- (setf (aref foo i) i)))
- (lose)
-
-
- ; ==== New file: req-initopt-rest-key-patch.lisp ====
- ; Fix a kernel bug that pushed the wrong stuff on the stack
- ; when a function had required, optional, rest, & keyword args
- ; and a value was not specified for all of the optionals.
-
-
- ; ==== New file: resident-interfaces-patch.lisp ====
- ; Functions moved from "ccl:library;interfaces.lisp"
- ; because they are referenced by some of the autoloaded traps:
-
-
- ; ==== New file: round-patch.lisp ====
- ; truncate, floor, ceiling, & round now check for multiple
- ; values and don't cons a second return value unless it's expected.
-
-
- ; ==== New file: register-trap-patch.lisp ====
- ; A compiled register trap of the form (register-trap :dn x :rn y ...)
- ; neglected to unbox x before saving it in two halves on the vstack.
- ; Only 5 traps are of this form:
- ; #_tempnewhandle, #_SysEnvirons, #_Secs2Date, #_SintRemove, #_SetTimeOut
- ; There also used to be an optimization that decided to simply
- ; nx2-move-reg all of the args. This doesn't work because nx2-move-reg
- ; clobbers d0. Besides, no real traps would set off the optimization.
-
-
- ; ==== New file: %make-lfun-patch.lisp ====
- ; %make-lfun no longer leaves an uninitialized byte at the beginning
- ; of the immediates map.
-
-
- ; ==== New file: compiler-patches-p2.lisp ====
- ; This fixes:
- ; 1) Don't decide that variables bound to closed-over/setqed variables
- ; can be eliminated until you're sure about it;
- ; 2) %i- for boolean effect: don't store to addresss "$test";
- ; Makes the following code compile properly (no F-LINE traps allowed)
- (defun foo (n)
- (declare (type (integer 0 (10)) n))
- (if (- 10 n) t nil)
- n)
- ; 3) Get it over with in FOLD-CONSTANT-SUBFORMS:
- ; 4) LABELS wasn't consistent about "parallel" binding order in some (amazingly simple) cases:
- ; 5) Don't choke on "(simple-array <type> N)" when looking for constant last dimension.
- ; 6) coerce lambda to 'function (finally!)
- ; 7) This wasn't maintaining stack discipline.
-
- ? (defun test-helper-1 (x y) (declare (ignore x y)) 'b)
- TEST-HELPER-1
- ? (defun test-helper-2 (a b c d e f g) (list a b c d e f g))
- TEST-HELPER-2
- ? (defun buggy (e a)
- ((lambda (g0 g1 g2 g3 &key ((:e g4) nil) ((:f g5) nil) ((:g g6) nil))
- (test-helper-2 g0 g1 g2 g3 g4 g5 g6))
- a (test-helper-1 e 'c) 'c 'd :e e))
- BUGGY
- ? (buggy 'e 'a)
- (A B C D B NIL NIL) ;*** should be (A B C D E NIL NIL)
-
- ; 8) The inappropriate use of NX2-GEN-MOVEQ (vice NX2-ABSOLUTE-LONG) here caused
- ; inlined number-of-args-checking to fail when there were >31 required/inherited args.
-
- (defmacro make-n-arg-function (name n)
- (let (args)
- (dotimes (i n)
- (push (gensym) args))
- `(defun ,name ,args
- (declare (ignore ,@args)
- (optimize (speed 3)))
- nil)))
- (make-n-arg-function foo 50)
- ; This errors before the patch and returns NIL after the patch
- (apply #'foo (make-list 50))
-
-
- ; 9) This isn't a compiler-bug per se:
- ; TYPEP has been fbf wrt certain complex array-type-specifiers for some time:
-
- (setq ar (make-array '(4 4) :element-type 'double-float))
- ; Should return T
- (typep ar (type-of ar))
-
-
-
- ; ==== New file: toplevel-loop-patch.lisp ====
- ; toplevel-loop throws to :toplevel instead of simply
- ; exiting in case a user calls it in a loop (in this case,
- ; you'll never be able to really get to toplevel so %set-toplevel
- ; becomes a nop.
-
-
- ; ==== New file: toplevel-meta-g-patch.lisp ====
- ; m-g now works correctly in the listener after (toplevel)
-
-
- ; ==== New file: locked-hash-table-patch.lisp ====
- ; Fix a stack-discipline bug in accessing a hash table that
- ; is locked and needs rehashing. This can happen if GETHASH is
- ; done during a MAPHASH when a GC has happened since the last time
- ; the hash table was rehashed.
-